/***********************************************************************************
 * 文件名： mcu_adc.c
 * 版本： 1
 * 说明：
 * 		NY8 的ADC外设驱动。使用说明见头文件。在 ny8_driver_config.h 文件中可配置初始状态。
 *  ADC驱动不包括IO口的模式设置，使用前需要自行确定IO口模式是否为模拟模式。
 * 修改记录：
 * 	2022/04/13: 初版。 刘言。
***********************************************************************************/
#include "mcu_adc.h"

#if (ADC_DISCARD_NUM > 0)
u8 _Adc_mDiscard = 0;
#endif


#if (ADC_DLEN == 0)
u8 Adc_GetOnce(u8 ch)
{
    ADIE = 0;
    Adc_Start(ch);
    while(_Adc_mDiscard < ADC_DISCARD_NUM)
    {
        while(EOC == 0);
        _Adc_mDiscard++;
        START = 1;	/* 继续转换 */
    }
    while(EOC == 0);
    ADIF = 0;
    ADIE = 1;
    _Adc_mRunning = false;
    return ADD;
}
#else
u16 Adc_GetOnce(u8 ch)
{
    ADIE = 0;
    Adc_Start(ch);
    while(_Adc_mDiscard < ADC_DISCARD_NUM)
    {
        while(EOC == 0);
        _Adc_mDiscard++;
        START = 1;	/* 继续转换 */
    }
    while(EOC == 0);
    ADIF = 0;
    ADIE = 1;
    _Adc_mRunning = false;
    return (((u16)ADD << 4) + (ADR & 0x0F));
}
#endif

#if (ADC_DISCARD_NUM > 0)
void Adc_Start(u8 ch)
{
    if(Adc_GetCH() != ch)
    {
        /*ADMD &= 0XF0;*/
        /*ADMD |= u8_ch;*/
        ADMD = 0X90|ch; 
        _Adc_mDiscard = 0;  // 重新开始记录丢弃笔数
    }
    _Adc_mRunning = true;
    START = 1;
}

void Adc_SetVref(adc_vref_t vref)
{
    if(Adc_GetVref() != vref)
    {
        _Adc_mDiscard = 0;  // 重新开始记录丢弃笔数
    }
    ADVREFH = vref;
}
#endif
